﻿// <copyright file="Material.cs" company="Axelerate Solutions S.A.">
// Copyright (c) Axelerate Solutions S.A.  All rights reserved.
// </copyright>

namespace Axelerate.Silverlight3D.Media.Media3D
{
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.ComponentModel;
    using System.Collections.Generic;
    using Axelerate.Silverlight3D.Controls;

    /// <summary>
    /// File name: Material.cs
    /// Company: Axelerate Solutions S.A.
    /// Created By: Daniel Rojas
    /// Created Date: 10/07/2008 13:27:00 h.
    /// Description: Abstract base class for materials.
    ///   <Modifications>
    ///   </Modifications>
    /// </summary>
    public abstract class Material : Freezable,
        IFormattable
    {
        #region Fields
        #endregion
        #region Constructors
        #endregion
        #region Properties
        #endregion
        #region Methods
        
        /// <summary>
        /// Try to clone the Material definition in a new Material Object
        /// </summary>
        /// <returns>New material object</returns>
        internal abstract Material Clone();

        /// <summary>
        /// Get the correct brush for the specific surface.
        /// </summary>
        /// <param name="Lights">List of light objects that must apply to the surface</param>
        /// <param name="SurfaceNormal">Normal vector to the surface</param>
        /// <param name="CameraViewDir">Camera view direction vector</param>
        /// <param name="IsSpecular">true if the brush will be used to render specular ligthing... (for future use)</param>
        /// <returns>A Brush class with the correct colors</returns>
        internal abstract Brush GetBrush(System.Collections.Generic.List<Light> Lights, Vector3D SurfaceNormal, Vector3D CameraViewDir, bool IsSpecular);

        #endregion
        #region IFormattable Members

        public virtual string ToString(string format, IFormatProvider formatProvider)
        {
            throw new NotImplementedException();
        }

        #endregion

        
    }
}
